<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>indexeddb练习</title>
</head>
<body>
<script>

  // 获取indexdb对象,为了兼容性的写法
  // 1、获取对象
  window.indexedDB = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB;
  window.IDBTransaction = window.IDBTransaction || window.webkitIDBTransaction || window.msIDBTransaction;
  window.IDBKeyRange = window.IDBKeyRange || window.webkitIDBKeyRange || window.msIDBKeyRange;
  window.IDBCursor = window.IDBCursor || window.webkitIDBCursor || window.msIDBCursor;

  // 2、定义数据库的基本信息
  var dbInfo = {
    dbName: 'aptdb',
    dbVersion: 201003, //用小数会四舍五入，版本号只能越来越大
    dbInstance: {},
  };

  // 3、创建数据库，打开一个请求
  var dbContent = window.indexedDB.open(dbInfo.dbName, dbInfo.dbVersion);


  // 当数据库版本升级的时候调用的回调函数
  // 没有库没有表，第一次打开请求肯定要走onupgradeneeded,走完之后会自动的走onsuccess回调
  // 在onupgradeneeded回调方法里面我们一般创建数据库里面的表，如果你要更新表或者是添加新的表，需要修改版本号才能进入这个回调方法
  dbContent.onupgradeneeded=function(e){
    // 4、创建数据库store(表)
    var _db = e.target.result;
    // 获取数据库里面现在所有的表
    var storeNames = _db.objectStoreNames;

    if (!storeNames.contains("cart")) {
      // 创建一个表结构出来
      _db.createObjectStore("cart", {
        keyPath: "goodsId",// 相当于关系型数据库中的主键，这个属性必须给
        autoIncrement: true
      });
    }

    if (!storeNames.contains("user")) {
      // 创建一个表结构出来
      _db.createObjectStore("user", {
        keyPath: "userId",// 相当于关系型数据库中的主键
        autoIncrement: true
      });
    }

//    var obj1={
//      goodsId:1234,
//      name:"张三",
//      age:34
//    }
//
//    var obj2={
//      goodsId:1235,
//      name:"李思",
//      age:34
//    }
  }

  // 数据库打开请求成功的时候的回调函数
  dbContent.onsuccess=function(e){
    // 5、增删改查操作，开启事物,每次只能做一件事情
    var _db = e.target.result;
    // 第一个参数是表名称数组,第二个参数是事务的权限
    var trans = _db.transaction(["cart","user"], "readwrite")
    var store = trans.objectStore("cart")


    // 6、增删该查的操作
//    // 增加数据
//    var req=store.add({
//      goodsId:"gd1004",
//      name:"貂皮大衣",
//      prise:400,
//      src:["10.11.2.3:79/images/1.jpg","10.11.2.3:79/images/2.jpg","10.11.2.3:79/images/3.jpg"]
//    })

    // 修改数据
//    var req=store.put({
//      goodsId:"gd1001",
//      name:"帽子",
//      prise:560,
//      src:["10.11.2.3:79/images/1.jpg","10.11.2.3:79/images/2.jpg","10.11.2.3:79/images/3.jpg"]
//    })

//     删除数据
//    var req=store.delete("gd1003");

    // 清空表
//    req = store.clear();

    // 查询数据
//    var req=store.get("gd1002");
//
//    req.onsuccess=function(e){
//      console.log(e.target.result);
//      console.log("数据添加成功");
//    }
//    req.onerror=function(e){
//      console.log("数据添加失败");
//    }


    // 查询所有数据（用了游标），你一开启就会自动走onsuccess方法
    var cursor=store.openCursor();
    var data=[];

    cursor.onsuccess=function(e){
      var result = e.target.result;
      if (result && result !== null) {
        data.push(result.value);
        // 重新执行onsuccess句柄
        result.continue();
      }
      console.log(data);
    }
    cursor.onerror=function(){

    }
  }

  // 数据库打开请求失败的时候的回调函数
  dbContent.onerror=function(){

  }














</script>

</body>
</html>
